package View;

/** Classe de operações referentes aos alunos.
*
* @author Thiago de Sousa Silveira
* 
* */

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;

import Pojo.Aluno;
import Pojo.Disciplina;
import Pojo.Historico;
import Pojo.HistoricoTurma;
import Pojo.Nota;
import Pojo.Turma;
import DAO.AlunoDaoImplArquivo;
import DAO.DisciplinaDaoImplArquivo;
import DAO.HistoricoDaoImplArquivo;
import DAO.HistoricoTurmaDaoImplArquivo;

public class MenuAluno{

	
	/**
	 * Classe comparador para ordenar as atividades
	 * @author Thiago de Sousa Silveira
	 *
	 */
	public class Comparador implements Comparator<Aluno>{
		/**
		 * Método de comparação que implementa o método de Comparator
		 */
		public int compare(Aluno aluno1, Aluno aluno2){
			return aluno1.getNome().compareTo(aluno2.getNome());
		}
	}
	
	/**Cadastro de alunos no sistema
	 * 
	 * @param alunoDao
	 */
	public void cadastrarAlunos(AlunoDaoImplArquivo alunoDao){
		System.out.println("-----Cadastrando Novo Aluno-----");
		int continuar=1;
		while(continuar==1){
			int idAluno = alunoDao.getProximoId();
			
			System.out.println("Informe o nome do Aluno: ");
			String nome = Console.readString();
			
			System.out.println("Informe o cpf do Aluno: ");
			String cpf = Console.readString();
			
			List<Historico> listaHistoricos = new ArrayList<Historico>();        //Cria a lista de Historico vazia.
			List<HistoricoTurma> listaHistoricoTurmas = new ArrayList<HistoricoTurma>(); //Cria a lista de HistoricoTurmas vazia.
			List<Nota> listaNotas = new ArrayList<Nota>();			//Cria a lista de Notas vazia.
			
			Aluno novoAluno = new Aluno(idAluno,nome,cpf,listaHistoricos,listaHistoricoTurmas,listaNotas);
			alunoDao.adicionarAluno(novoAluno);
			
			System.out.println("Deseja cadastrar mais um aluno? (1-Sim, 0-Não)");
			continuar = Console.readInteger();
		}
	}
	
	/**Exibição de Alunos não cadastrados em determinada turma
	 * 
	 * @param novaTurma
	 * @param alunoDao
	 * @param historicoTurmaDao
	 * @return int com o número de alunos não cadastrados na turma.
	 */
	public int escolherAlunosNaoCadastradosTurma(Turma novaTurma, AlunoDaoImplArquivo alunoDao,HistoricoTurmaDaoImplArquivo historicoTurmaDao){
		System.out.println("---Escolha o Aluno---");
		
		List<Aluno> listaAluno = alunoDao.getListaAlunos();
		List<HistoricoTurma> listaHistoricoTurma = historicoTurmaDao.getListaHistoricoTurmas();
		Iterator<Aluno> i = listaAluno.iterator();
		Aluno aluno;
		int verificador;
		int contador=0;
		while(i.hasNext()){
			aluno = (Aluno) i.next();
			verificador=1;
			for (HistoricoTurma historico: listaHistoricoTurma){
				if ((historico.getAluno().getIdAluno() == aluno.getIdAluno())&&(novaTurma.getIdTurma() == historico.getTurma().getIdTurma())){
					verificador=0;
					break;
				}
			}
			if (verificador==1){
				System.out.println(aluno.getIdAluno() + " - "+ aluno.getNome());
				contador++;
			}
		}
		return(contador);
	}
	
	/**Listagem de alunos cadastrados no sistema
	 * 
	 * @param alunoDao
	 */
	public void listarAlunos(AlunoDaoImplArquivo alunoDao){
		System.out.println("---Lista de Alunos---");
		
		List<Aluno> listaAlunos = alunoDao.getListaAlunos();
		Comparador comparador = new Comparador();
		Collections.sort(listaAlunos,comparador);
		
		Iterator<Aluno> i = listaAlunos.iterator();
		Aluno aluno;
		System.out.println("Nome | CPF ");
		while(i.hasNext()){
			aluno = (Aluno) i.next();
			System.out.println(aluno.getNome()+ " | " + aluno.getCpf());
		}
		System.out.println("Pressione enter para retornar.");
		Console.readString();
	}

	/**Método para seleção de alunos no sistema.
	 * 
	 * @param alunoDao
	 */
	public void escolherAlunos(AlunoDaoImplArquivo alunoDao){
		System.out.println("---Escolha a o Aluno---");
		
		List<Aluno> listaAlunos = alunoDao.getListaAlunos();
		Iterator<Aluno> i = listaAlunos.iterator();
		Aluno aluno;
		System.out.println("Código | Nome | CPF ");
		while(i.hasNext()){
			aluno = (Aluno) i.next();
			System.out.println(aluno.getIdAluno() + " | "+ aluno.getNome()+ " | " + aluno.getCpf());
		}
	}
	
}
